package nextfm.bean;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import nextfm.dao.DAOUsuario;
import nextfm.model.Comum;
import nextfm.model.Usuario;

public class UsuarioBean {
	
	DAOUsuario daoUsuario = new DAOUsuario();
	int id;
	String nome;
	String login;
	String email;
	String senha;
	boolean exibirPanel;
	boolean exibirPanelAtualizacao;
	Comum usuarioSelecionado;
	List<Comum> usuarios = daoUsuario.findAllUsuariosComuns();
	int scrollerPage = 1;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	public boolean isExibirPanel() {
		return exibirPanel;
	}

	public void setExibirPanel(boolean exibirPanel) {
		this.exibirPanel = exibirPanel;
	}
	
	public Comum getUsuarioSelecionado() {
		return usuarioSelecionado;
	}

	public void setUsuarioSelecionado(Comum usuarioSelecionado) {
		this.usuarioSelecionado = usuarioSelecionado;
	}

	public boolean isExibirPanelAtualizacao() {
		return exibirPanelAtualizacao;
	}

	public void setExibirPanelAtualizacao(boolean exibirPanelAtualizacao) {
		this.exibirPanelAtualizacao = exibirPanelAtualizacao;
	}

	public List<Comum> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Comum> usuarios) {
		this.usuarios = usuarios;
	}

	public int getScrollerPage() {
		return scrollerPage;
	}

	public void setScrollerPage(int scrollerPage) {
		this.scrollerPage = scrollerPage;
	}

	public String remover() {
		try {
			System.out.println("Removendo usuário de id" + getId());
			Usuario administrador = daoUsuario.find(getId());
			daoUsuario.begin();
			daoUsuario.remove(administrador);
			daoUsuario.commit();
			return "success";
		}

		catch (Exception e) {
			return "failure";
		}
	}
	
	public String editar() {

		try {
			Comum comum = (Comum) daoUsuario.find(getId());
			comum.setNome(getNome());
			comum.setEmail(getEmail());
			comum.setLogin(getLogin());
			System.out.println("Editando usuário de id " + getId());
			daoUsuario.begin();
			daoUsuario.merge(comum);
			daoUsuario.commit();
			return "success";
		}

		catch (Exception e) {
			e.printStackTrace();
			FacesMessage msg = new FacesMessage("Nome de usuario ja existente");
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			FacesContext fc = FacesContext.getCurrentInstance();
			fc.addMessage("atualizacao", msg);
			setExibirPanelAtualizacao(true);
			return "failure";
		}

	}
	
	public String cadastrar() {
		try {
			System.out.println("Adicionando usuario " + getNome());
			Comum comum = new Comum(getNome(), getLogin(), getSenha(), getEmail(), 0);
			daoUsuario.begin();
			daoUsuario.persist(comum);
			daoUsuario.commit();
			return "success";
		}
		
		catch (Exception e) {
			e.printStackTrace();
			FacesMessage msg = new FacesMessage("Nome de usuario ja existente");
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			FacesContext fc = FacesContext.getCurrentInstance();
			fc.addMessage("cadastro", msg);
			setExibirPanel(true);
			return "failure";
		}
	}
	
	public String bloquear() {
		try {
			System.out.println("Bloqueando usuário de ID " + getId());
			Comum comum = (Comum) daoUsuario.find(id);
			if (comum.getEstado() == 0) {
				comum.setEstado(1);
			}
			else {
				comum.setEstado(0);
			}
			daoUsuario.begin();
			daoUsuario.merge(comum);
			daoUsuario.commit();
			return "success";
		}
		
		catch (Exception e) {
			return "failure";
		}
	}
	
	public void selecionarUsuario(ActionEvent evento){  
		UIParameter component = (UIParameter) evento.getComponent().findComponent("codigoEdicao");  
		int codigo = Integer.parseInt(component.getValue().toString());   
		setUsuarioSelecionado((Comum) daoUsuario.find(codigo));
		setEmail(usuarioSelecionado.getEmail());
		setLogin(usuarioSelecionado.getLogin());
		setNome(usuarioSelecionado.getNome());
		setId(codigo);
	}
	
}
